
package Network;

import java.rmi.Remote;
import java.rmi.RemoteException;
import taskmanager.JTask;

/**
 * интерфейс планировщика для удаленного объекта ведомого сервера
 * интерфейс объявляет методы необходимые для управления планировщиком
 * ведомого сервера
 * @author Aleksey ID=2001
 */
public interface ISlaveTaskManager extends Remote {
    /**
     * Добавить задачу в планировщик
     * @param task задача, не null !
     * @return true - задача добавлена, false - задача с указанным id уже есть
     * @throws java.rmi.RemoteException ошибка сети
     */
    public boolean addTask(JTask task) throws RemoteException;

    /**
     * Удалить задачу из планировщика
     * Процессы связанные с задачей уничтожаются
     * @param taskID идентификатор задачи
     * @return true - задача удалена, false - задачи нет
     * @throws java.rmi.RemoteException ошибка сети
     */
    public boolean removeTask(long taskID) throws RemoteException;

    /**
     * Остановить выполнение задачи
     * @param taskID идентификатор задачи
     * @return true - задача остановлена, false - задачи нет
     * @throws java.rmi.RemoteException ошибка сети
     */
    public boolean stopTask(long taskID) throws RemoteException;

    /**
     * Запросить количество задач в планировщике
     * @return число задач в планировщике
     * @throws java.rmi.RemoteException ошибка сети
     */
    public int getTaskCount() throws RemoteException;

    /**
     * Проверить наличие задач в планировщике
     * @return true - здач нет, иначе false
     * @throws java.rmi.RemoteException ошибка сети
     */
    public boolean isEmpty() throws RemoteException;

    /**
     * Установить максимальное количество активных задач для планировщика
     * нижнего уровня
     * @param max максимально количество активных задач
     * @throws java.rmi.RemoteException ошибка сети
     */
    public void setMaxActiveCount(int max) throws RemoteException;

    /**
     * Запросить максимальное количество активных задач планировщика нижнего
     * уровня
     * @return максимально количество активных задач
     * @throws java.rmi.RemoteException ошибка сети
     */
    public int getMaxActiveCount() throws RemoteException;

    /**
     * Проверить наличие задачи
     * @param taskID идентификатор задачи
     * @return true - задача присутствует, false иначе
     * @throws java.rmi.RemoteException ошибка сети
     */
    public boolean containsTask(long taskID) throws RemoteException;

    /**
     * Запросить количество активных задач для планировщика
     * нижнего уровня
     * @return количество активных задач
     * @throws java.rmi.RemoteException ошибка сети
     */
    public int getActiveCount() throws RemoteException;

    /**
     * Запросить задачу
     * @param taskID идентификатор задачи
     * @return задача или null в случае отсутствия
     * @throws java.rmi.RemoteException ошибка сети
     */
    public JTask getTask(long taskID) throws RemoteException;

    /**
     * Запросить идентификаторы активных задач
     * @return массив идентификаторов задач
     * @throws java.rmi.RemoteException ошибка сети
     */
    public long[] getActiveTasks() throws RemoteException;

    /**
     * Запросить идентификаторы ожидающих и приостановленных задач
     * @return массив идентификаторов задач
     * @throws java.rmi.RemoteException ошибка сети
     */
    public long[] getWaitTasks() throws RemoteException;

    /**
     * Запросить идентификаторы задач в планировщике
     * @return массив идентификаторов задач
     * @throws java.rmi.RemoteException ошибка сети
     */
    public long[] getAllTasks() throws RemoteException;
}
